Il Protocollo ARP (Address Resolution Protocol)

Introduzione

Il protocollo ARP (Address Resolution Protocol) è un protocollo di livello 2/3 del modello OSI utilizzato per risolvere indirizzi IP in indirizzi MAC all’interno di una rete locale (LAN). Definito nell’RFC 826 del 1982, ARP è fondamentale per il funzionamento delle reti Ethernet/IP.

Funzione Principale

ARP permette di scoprire l’indirizzo MAC (hardware) di un dispositivo conoscendone l’indirizzo IP (logico), rendendo possibile la comunicazione a livello Data Link.


Incapsulamento della Trama ARP

Il Concetto di Incapsulamento

Quando parliamo di incapsulamento, ci riferiamo a un meccanismo fondamentale nelle reti a strati: ogni livello del modello OSI “avvolge” i dati del livello superiore aggiungendo le proprie informazioni di controllo. È come inserire una lettera in una busta: la lettera (dati di livello superiore) viene inserita nella busta (intestazione di livello inferiore) per essere spedita.

ARP: un Protocollo a Cavallo tra Due Livelli

Il protocollo ARP ha una caratteristica particolare: opera tra il livello 2 (Data Link) e il livello 3 (Network) del modello OSI. Non è un protocollo puramente di livello 3 come IP, né puramente di livello 2 come Ethernet. La sua funzione è proprio quella di “collegare” questi due livelli, traducendo indirizzi logici (IP) in indirizzi fisici (MAC).

Come Funziona l’Incapsulamento ARP

Quando un dispositivo deve inviare un messaggio ARP, il pacchetto ARP viene inserito come payload (carico utile) all’interno di una trama Ethernet. Vediamo come:

  1. Prima viene creato il pacchetto ARP (28 byte) con tutti i suoi campi (che vedremo in dettaglio)
  2. Poi questo pacchetto viene “inserito” all’interno di una trama Ethernet
  3. L’Ethernet aggiunge le proprie intestazioni prima e dopo il pacchetto ARP

Il risultato è una struttura “a scatole cinesi”:

┌───────────────────────────────────────────────────────────────┐
│                      TRAMA ETHERNET                           │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Header Ethernet (14 byte)                                 │ │
│ │  • MAC Destinazione (6 byte)                              │ │
│ │  • MAC Sorgente (6 byte)                                  │ │
│ │  • EtherType = 0x0806 (2 byte) ← indica che segue ARP    │ │
│ └───────────────────────────────────────────────────────────┘ │
│                                                                 │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │           PACCHETTO ARP (28 byte)                         │ │
│ │  • Hardware Type                                          │ │
│ │  • Protocol Type                                          │ │
│ │  • Lunghezze indirizzi                                    │ │
│ │  • Operation (Request/Reply)                              │ │
│ │  • Sender MAC e IP                                        │ │
│ │  • Target MAC e IP                                        │ │
│ └───────────────────────────────────────────────────────────┘ │
│                                                                 │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Padding (se necessario, fino a 18 byte)                   │ │
│ └───────────────────────────────────────────────────────────┘ │
│                                                                 │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ FCS - Frame Check Sequence (4 byte)                       │ │
│ │ (controllo errori calcolato su tutta la trama)            │ │
│ └───────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────┘

Visualizzazione Schematica Semplificata

+------------------+------------------+----------+----------+-----+
| MAC Destinazione | MAC Sorgente     | EtherType| Payload  | FCS |
| (6 byte)         | (6 byte)         | (2 byte) | (28 byte)| 4 B |
+------------------+------------------+----------+----------+-----+
                                       |  0x0806  |
                                       |   ARP    |
                                       +----------+

Il Campo EtherType: L’Identificatore Fondamentale

Il campo EtherType nell’intestazione Ethernet è cruciale per l’incapsulamento. Questo campo di 2 byte comunica al ricevente che tipo di dati sono contenuti nel payload della trama.

Valori comuni di EtherType:

Quando una scheda di rete riceve una trama Ethernet, la prima cosa che fa è leggere il campo EtherType. Se legge 0x0806, “sa” che deve passare i dati al gestore del protocollo ARP e non, ad esempio, allo stack TCP/IP.

Perché Questa Struttura?

Questa organizzazione a livelli permette:

  1. Separazione delle responsabilità: Ethernet si occupa solo di trasportare la trama da un MAC all’altro sulla rete locale, mentre ARP si occupa della risoluzione degli indirizzi

  2. Flessibilità: La stessa infrastruttura Ethernet può trasportare diversi protocolli (IP, ARP, IPv6, etc.) semplicemente cambiando l’EtherType

  3. Modularità: Possiamo cambiare il protocollo di livello superiore (es. passare da IPv4 a IPv6) senza dover modificare Ethernet

Esempio Concreto di Incapsulamento

Immaginiamo che il computer con IP 192.168.1.100 voglia scoprire il MAC del router 192.168.1.1:

Passo 1 - Creazione del pacchetto ARP:

Il sistema operativo crea un pacchetto ARP Request di 28 byte:
- Operation: 1 (Request)
- Sender IP: 192.168.1.100
- Sender MAC: 00:11:22:33:44:55
- Target IP: 192.168.1.1
- Target MAC: 00:00:00:00:00:00 (sconosciuto!)

Passo 2 - Incapsulamento in Ethernet:

Il driver della scheda di rete "avvolge" il pacchetto ARP in una trama Ethernet:
- MAC Destinazione: FF:FF:FF:FF:FF:FF (broadcast - tutti devono riceverlo!)
- MAC Sorgente: 00:11:22:33:44:55 (il nostro MAC)
- EtherType: 0x0806 (dice: "questo è ARP")
- Payload: [il pacchetto ARP di 28 byte creato prima]
- FCS: [calcolato automaticamente dall'hardware]

Passo 3 - Trasmissione:

La scheda di rete aggiunge il preambolo e trasmette la trama sul cavo.
Tutte le schede di rete sulla stessa LAN riceveranno la trama.

Passo 4 - Ricezione e De-incapsulamento:

Ogni scheda di rete:
1. Riceve la trama
2. Controlla il MAC destinazione (FF:FF:FF:FF:FF:FF → è per tutti!)
3. Legge l'EtherType (0x0806 → è un pacchetto ARP)
4. "Estrae" il pacchetto ARP di 28 byte dal payload
5. Lo passa al software che gestisce ARP
6. Solo il dispositivo con IP 192.168.1.1 risponderà

La Differenza tra Pacchetto e Trama

È importante comprendere la terminologia:

Quando diciamo “il pacchetto ARP viene incapsulato nella trama Ethernet”, significa esattamente questo: il pacchetto diventa parte del contenuto (payload) della trama.

Intestazione Ethernet per ARP

Campo Dimensione Descrizione
MAC Destinazione 6 byte FF:FF:FF:FF:FF:FF per ARP Request (broadcast)<br>MAC specifico per ARP Reply
MAC Sorgente 6 byte Indirizzo MAC del mittente
EtherType 2 byte 0x0806 identifica il protocollo ARP
Payload ARP 28 byte Dati del protocollo ARP
FCS 4 byte Frame Check Sequence (controllo errori)

Struttura Dettagliata del Pacchetto ARP

Il payload ARP ha una dimensione fissa di 28 byte ed è composto dai seguenti campi:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Hardware Type          |         Protocol Type         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  HW Addr Len  | Proto Addr Len|          Operation            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Sender Hardware Address                     |
|                        (6 byte)                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Sender Protocol Address                     |
|                        (4 byte)                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Target Hardware Address                     |
|                        (6 byte)                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Target Protocol Address                     |
|                        (4 byte)                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Descrizione dei Campi ARP

1. Hardware Type (HTYPE) - 2 byte

Offset: 0-1 | Dimensione: 16 bit

Identifica il tipo di indirizzo hardware utilizzato.

Valore Tipo Descrizione
0x0001 Ethernet Rete Ethernet (il più comune)
0x0006 IEEE 802 Reti token ring
0x0007 ARCnet Architettura ARCnet
0x000F Frame Relay Reti Frame Relay

Valore tipico: 0x0001 (Ethernet)


2. Protocol Type (PTYPE) - 2 byte

Offset: 2-3 | Dimensione: 16 bit

Identifica il tipo di protocollo di livello 3 per cui si richiede la risoluzione.

Valore Protocollo
0x0800 IPv4 (il più comune)
0x86DD IPv6

Valore tipico: 0x0800 (IPv4)


3. Hardware Address Length (HLEN) - 1 byte

Offset: 4 | Dimensione: 8 bit

Specifica la lunghezza in byte dell’indirizzo hardware.

Valore per Ethernet: 6 (indirizzo MAC a 48 bit)


4. Protocol Address Length (PLEN) - 1 byte

Offset: 5 | Dimensione: 8 bit

Specifica la lunghezza in byte dell’indirizzo di protocollo.

Valore per IPv4: 4 (indirizzo IP a 32 bit)


5. Operation (OP) - 2 byte

Offset: 6-7 | Dimensione: 16 bit

Specifica il tipo di operazione ARP.

Valore Tipo Descrizione
0x0001 ARP Request Richiesta di risoluzione indirizzo
0x0002 ARP Reply Risposta con indirizzo MAC
0x0003 RARP Request Reverse ARP - richiesta IP da MAC
0x0004 RARP Reply Reverse ARP - risposta
0x0008 InARP Request Inverse ARP request
0x0009 InARP Reply Inverse ARP reply

Valori più comuni: 1 (Request) e 2 (Reply)


6. Sender Hardware Address (SHA) - 6 byte

Offset: 8-13 | Dimensione: 48 bit

Indirizzo MAC del dispositivo mittente.

Formato: XX:XX:XX:XX:XX:XX (notazione esadecimale)

Esempio: 00:1A:2B:3C:4D:5E


7. Sender Protocol Address (SPA) - 4 byte

Offset: 14-17 | Dimensione: 32 bit

Indirizzo IP del dispositivo mittente.

Formato: Indirizzo IPv4 in notazione decimale puntata

Esempio: 192.168.1.100C0.A8.01.64 (hex)


8. Target Hardware Address (THA) - 6 byte

Offset: 18-23 | Dimensione: 48 bit

Indirizzo MAC del dispositivo destinatario.

Nel caso di ARP Request:

Nel caso di ARP Reply:


9. Target Protocol Address (TPA) - 4 byte

Offset: 24-27 | Dimensione: 32 bit

Indirizzo IP del dispositivo destinatario di cui si vuole conoscere il MAC.

Esempio: 192.168.1.1


Tabella Riepilogativa dei Campi

Campo Offset Dimensione Valore Tipico Descrizione
Hardware Type 0-1 2 byte 0x0001 Ethernet
Protocol Type 2-3 2 byte 0x0800 IPv4
HW Address Length 4 1 byte 6 Lunghezza MAC
Protocol Address Length 5 1 byte 4 Lunghezza IP
Operation 6-7 2 byte 1 o 2 Request/Reply
Sender HW Address 8-13 6 byte MAC mittente Es: 00:1A:2B:3C:4D:5E
Sender Protocol Address 14-17 4 byte IP mittente Es: 192.168.1.100
Target HW Address 18-23 6 byte 00:00:00:00:00:00 (Request) MAC destinatario
Target Protocol Address 24-27 4 byte IP destinatario Es: 192.168.1.1

Dimensione totale payload ARP: 28 byte


Esempio Pratico: ARP Request

Scenario

Il computer 192.168.1.100 (MAC: 00:11:22:33:44:55) vuole comunicare con il router 192.168.1.1 ma non conosce il suo indirizzo MAC.

Trama ARP Request Completa

TRAMA ETHERNET (14 byte header + 28 byte payload + 4 byte FCS = 46 byte)
┌─────────────────────────────────────────────────────────────┐
│ ETHERNET HEADER                                             │
├─────────────────────────────────────────────────────────────┤
│ MAC Destinazione:  FF:FF:FF:FF:FF:FF  (Broadcast)          │
│ MAC Sorgente:      00:11:22:33:44:55                       │
│ EtherType:         0x0806              (ARP)               │
├─────────────────────────────────────────────────────────────┤
│ ARP PAYLOAD                                                 │
├─────────────────────────────────────────────────────────────┤
│ Hardware Type:     0x0001              (Ethernet)          │
│ Protocol Type:     0x0800              (IPv4)              │
│ HW Addr Length:    0x06                (6 byte)            │
│ Proto Addr Length: 0x04                (4 byte)            │
│ Operation:         0x0001              (Request)           │
│ Sender MAC:        00:11:22:33:44:55                       │
│ Sender IP:         192.168.1.100                           │
│ Target MAC:        00:00:00:00:00:00   (sconosciuto)       │
│ Target IP:         192.168.1.1                             │
└─────────────────────────────────────────────────────────────┘

Dump Esadecimale

Offset  Hex                                              ASCII
------  -----------------------------------------------  ----------------
0000    FF FF FF FF FF FF 00 11 22 33 44 55 08 06      ........"3DU..
                          ↑ MAC Sorgente    ↑ EtherType
0010    00 01 08 00 06 04 00 01 00 11 22 33 44 55      ..........."3DU
        ↑HType ↑PType ↑L ↑L ↑Op  ↑ Sender MAC
0020    C0 A8 01 64 00 00 00 00 00 00 C0 A8 01 01      ...d..........
        ↑Sender IP   ↑ Target MAC      ↑Target IP

Esempio Pratico: ARP Reply

Scenario

Il router 192.168.1.1 (MAC: AA:BB:CC:DD:EE:FF) risponde alla richiesta.

Trama ARP Reply Completa

TRAMA ETHERNET
┌─────────────────────────────────────────────────────────────┐
│ ETHERNET HEADER                                             │
├─────────────────────────────────────────────────────────────┤
│ MAC Destinazione:  00:11:22:33:44:55  (Unicast al PC)     │
│ MAC Sorgente:      AA:BB:CC:DD:EE:FF  (Router)             │
│ EtherType:         0x0806              (ARP)               │
├─────────────────────────────────────────────────────────────┤
│ ARP PAYLOAD                                                 │
├─────────────────────────────────────────────────────────────┤
│ Hardware Type:     0x0001              (Ethernet)          │
│ Protocol Type:     0x0800              (IPv4)              │
│ HW Addr Length:    0x06                (6 byte)            │
│ Proto Addr Length: 0x04                (4 byte)            │
│ Operation:         0x0002              (Reply)             │
│ Sender MAC:        AA:BB:CC:DD:EE:FF   (Router)            │
│ Sender IP:         192.168.1.1                             │
│ Target MAC:        00:11:22:33:44:55   (PC richiedente)    │
│ Target IP:         192.168.1.100                           │
└─────────────────────────────────────────────────────────────┘

Confronto Request vs Reply

Campo ARP Request ARP Reply
Ethernet Dest MAC FF:FF:FF:FF:FF:FF (broadcast) 00:11:22:33:44:55 (unicast)
Ethernet Src MAC 00:11:22:33:44:55 (PC) AA:BB:CC:DD:EE:FF (Router)
Operation 0x0001 (Request) 0x0002 (Reply)
Sender MAC 00:11:22:33:44:55 (PC) AA:BB:CC:DD:EE:FF (Router)
Sender IP 192.168.1.100 (PC) 192.168.1.1 (Router)
Target MAC 00:00:00:00:00:00 00:11:22:33:44:55 (PC)
Target IP 192.168.1.1 (Router) 192.168.1.100 (PC)

Considerazioni sulla Dimensione della Trama

Calcolo Dimensione Totale

Trama Ethernet completa:
┌────────────────┬──────────┐
│ Preambolo      │  8 byte  │ (non trasmesso in catture software)
│ MAC Dest       │  6 byte  │
│ MAC Src        │  6 byte  │
│ EtherType      │  2 byte  │
│ Payload ARP    │ 28 byte  │
│ Padding        │ 18 byte  │ (se necessario per min 64 byte)
│ FCS            │  4 byte  │
└────────────────┴──────────┘

Dimensione Minima delle Trame Ethernet

La Regola dei 64 Byte

Uno degli aspetti fondamentali dello standard Ethernet IEEE 802.3 è che ogni trama deve avere una dimensione minima di 64 byte (escluso il preambolo e il SFD - Start Frame Delimiter). Questa non è una scelta arbitraria, ma deriva da precise necessità tecniche legate al funzionamento del protocollo CSMA/CD (Carrier Sense Multiple Access with Collision Detection).

Perché Esiste una Dimensione Minima?

La dimensione minima di 64 byte è stata stabilita per garantire il corretto funzionamento dell’algoritmo di rilevamento delle collisioni nelle reti Ethernet classiche (10BASE-T, 100BASE-T in half-duplex).

Il problema delle collisioni:

Nelle reti Ethernet half-duplex, quando due dispositivi trasmettono simultaneamente, si verifica una collisione. Il meccanismo CSMA/CD richiede che il dispositivo trasmittente sia ancora in trasmissione quando il segnale di collisione torna indietro dal punto più lontano della rete.

Il calcolo:

Consideriamo una rete Ethernet 10BASE-T con la massima estensione consentita:

A 10 Mbps:

Per sicurezza, lo standard ha raddoppiato questo valore e arrotondato, arrivando a 64 byte come dimensione minima. Questo garantisce che anche in scenari peggiori (massima distanza, collisione tardiva), il trasmittente rilevi sempre la collisione prima di terminare la trasmissione.

Componenti della Dimensione Minima

La trama di 64 byte si compone in questo modo:

┌─────────────────────────────────────────────────────┐
│  TRAMA ETHERNET MINIMA = 64 byte                    │
├─────────────────────────────────────────────────────┤
│                                                      │
│  Header Ethernet:            14 byte                │
│    • MAC Destinazione:        6 byte                │
│    • MAC Sorgente:            6 byte                │
│    • EtherType/Length:        2 byte                │
│                                                      │
│  Payload (dati utili):     46-1500 byte             │
│    • Minimo:                 46 byte                │
│    • Massimo:              1500 byte (MTU)          │
│                                                      │
│  FCS (Frame Check Seq.):      4 byte                │
│                                                      │
└─────────────────────────────────────────────────────┘

Totale minimo: 14 + 46 + 4 = 64 byte

Nota importante: Il preambolo (7 byte) e l’SFD (1 byte) vengono aggiunti a livello fisico e non sono conteggiati nei 64 byte. La trama completa trasmessa sul cavo è quindi di almeno 72 byte.

Il Padding: Quando e Perché

Quando il payload effettivo è inferiore a 46 byte, viene automaticamente aggiunto del padding (riempimento) per raggiungere la dimensione minima richiesta.

Cos’è il padding?

Il padding consiste in byte di riempimento (solitamente zeri, ma non necessariamente) aggiunti alla fine del payload per portare la trama alla dimensione minima di 64 byte totali.

Formula del padding:

Padding necessario = 46 - dimensione_payload_effettivo

Se (Header + Payload + FCS) < 64 byte:
    Padding = 46 - dimensione_payload
Altrimenti:
    Padding = 0

Calcolo Dettagliato per le Trame ARP

Analizziamo passo per passo una trama contenente un pacchetto ARP:

Passo 1 - Dimensioni dei componenti:

Header Ethernet:     14 byte
  ├─ MAC Dest:        6 byte
  ├─ MAC Source:      6 byte
  └─ EtherType:       2 byte (0x0806 per ARP)

Payload ARP:         28 byte
  ├─ Hardware Type:   2 byte
  ├─ Protocol Type:   2 byte
  ├─ HW Addr Len:     1 byte
  ├─ Proto Addr Len:  1 byte
  ├─ Operation:       2 byte
  ├─ Sender MAC:      6 byte
  ├─ Sender IP:       4 byte
  ├─ Target MAC:      6 byte
  └─ Target IP:       4 byte

FCS:                  4 byte

Passo 2 - Somma senza padding:

14 (Header) + 28 (ARP) + 4 (FCS) = 46 byte

46 byte < 64 byte → È necessario il padding!

Passo 3 - Calcolo del padding necessario:

Payload minimo richiesto = 46 byte
Payload effettivo (ARP) = 28 byte

Padding = 46 - 28 = 18 byte

Passo 4 - Trama finale:

┌──────────────────────────────────────────────────┐
│ Header Ethernet:           14 byte               │
├──────────────────────────────────────────────────┤
│ Payload ARP:               28 byte               │
├──────────────────────────────────────────────────┤
│ PADDING (zeri):            18 byte ← Aggiunto!   │
├──────────────────────────────────────────────────┤
│ FCS:                        4 byte               │
└──────────────────────────────────────────────────┘

Totale: 14 + 28 + 18 + 4 = 64 byte ✓

Visualizzazione Esadecimale con Padding

Ecco come appare una trama ARP reale con il padding:

Offset  Hex Data                                         ASCII
------  -----------------------------------------------  ----------------
0000    FF FF FF FF FF FF 00 11 22 33 44 55 08 06      ........"3DU..
        └─ MAC Dest ─┘ └─ MAC Src ──┘ └EType┘
        
0010    00 01 08 00 06 04 00 01 00 11 22 33 44 55      ..........."3DU
        └HT─┘ └PT─┘ HL PL └Op┘ └─ Sender MAC ──┘
        
0020    C0 A8 01 64 00 00 00 00 00 00 C0 A8 01 01      ...d..........
        └Sender IP┘ └─ Target MAC ──┘ └Target IP┘
        
0030    00 00 00 00 00 00 00 00 00 00 00 00 00 00      ..............
        └──────────── PADDING (18 byte) ─────────────
        
0040    00 00 00 00 XX XX XX XX                         ........
        ─────┘ └─── FCS ──┘

I byte da offset 0x002C a 0x003D (18 byte) sono il padding aggiunto automaticamente.

Chi Aggiunge il Padding?

Il padding viene aggiunto automaticamente dall’hardware della scheda di rete (NIC - Network Interface Card) prima della trasmissione. Il software (driver, sistema operativo) non deve preoccuparsi di questo dettaglio.

Processo:

  1. Il sistema operativo crea il pacchetto ARP (28 byte)
  2. Lo passa al driver Ethernet che aggiunge l’header (14 byte)
  3. Il controller della NIC verifica la dimensione totale
  4. Se < 64 byte, la NIC aggiunge automaticamente il padding
  5. La NIC calcola e aggiunge il FCS
  6. La trama viene trasmessa sul cavo

Dimensione Massima: MTU (Maximum Transmission Unit)

Mentre esiste un minimo, esiste anche un massimo:

Trama Ethernet standard (senza VLAN tag):
┌─────────────────────────────────────────┐
│ Header:           14 byte               │
│ Payload MAX:    1500 byte (MTU)         │
│ FCS:               4 byte               │
└─────────────────────────────────────────┘
Totale MAX: 1518 byte

MTU (Maximum Transmission Unit) = 1500 byte

Questa è la quantità massima di dati che può essere trasportata in una singola trama Ethernet standard. Pacchetti IP più grandi devono essere frammentati.

Jumbo Frames:

Alcune reti supportano “Jumbo Frames” con MTU fino a 9000 byte, utilizzate in ambienti che richiedono alte prestazioni (data center, storage network).

Tabella Riepilogativa delle Dimensioni

Componente Minimo Standard Massimo Note
Preambolo + SFD 8 byte 8 byte 8 byte Non conteggiato nei 64 byte
Header Ethernet 14 byte 14 byte 14 byte Fisso (senza VLAN)
Payload 46 byte variabile 1500 byte Include eventuale padding
FCS 4 byte 4 byte 4 byte Fisso
Trama totale 64 byte variabile 1518 byte Senza preambolo
Sul cavo 72 byte variabile 1526 byte Con preambolo

Implicazioni Pratiche del Padding

1. Efficienza di banda:

Per dati molto piccoli, il padding rappresenta uno spreco. Ad esempio, un ping ICMP con 1 byte di dati:

Header IP:     20 byte
Header ICMP:    8 byte
Dati:           1 byte
─────────────────────
Payload totale: 29 byte

Con header Ethernet (14 byte) e FCS (4 byte):
14 + 29 + 4 = 47 byte → servono 17 byte di padding!

Efficienza: 1 byte utile su 64 byte totali = 1.56%

2. Sicurezza:

Il padding potrebbe contenere residui di memoria precedente. Alcuni sistemi azzerano esplicitamente il padding per evitare information leakage.

3. Rilevamento del padding:

Il ricevente deve sapere dove finiscono i dati reali e inizia il padding. Questo è gestito dai protocolli di livello superiore (es. IP ha un campo “Total Length”).

Caso Speciale: Reti Moderne (Full-Duplex)

Nelle reti moderne full-duplex (commutate con switch), non ci sono collisioni perché i canali di trasmissione e ricezione sono separati. Tecnicamente, il limite minimo di 64 byte non sarebbe necessario per ragioni di CSMA/CD.

Tuttavia, lo standard mantiene il limite per:

Riassunto dei Concetti Chiave

✓ La dimensione minima di 64 byte deriva da requisiti tecnici del CSMA/CD
✓ Il padding viene aggiunto automaticamente dall’hardware quando necessario
✓ Per ARP servono 18 byte di padding (28 byte dati + 18 padding = 46 byte payload)
✓ Il preambolo (8 byte) non è conteggiato nei 64 byte
✓ La dimensione massima standard è 1518 byte (MTU 1500 + 14 header + 4 FCS)
✓ Nelle reti moderne il limite persiste per compatibilità e standardizzazione


Tipi Speciali di Messaggi ARP

1. Gratuitous ARP

Un dispositivo invia un ARP Request per il proprio indirizzo IP.

Scopi:

Caratteristiche:

2. ARP Probe

Verifica se un indirizzo IP è già in uso prima di configurarlo.

Caratteristiche:

3. ARP Announcement

Annuncio dell’associazione IP-MAC appena configurata.

Caratteristiche:


ARP Cache

I dispositivi mantengono una tabella ARP (ARP cache) per evitare continue richieste.

Struttura della Cache

Indirizzo IP Indirizzo MAC Tipo TTL
192.168.1.1 AA:BB:CC:DD:EE:FF Dinamico 120s
192.168.1.50 11:22:33:44:55:66 Dinamico 45s
192.168.1.254 FF:EE:DD:CC:BB:AA Statico

Comandi per visualizzare la cache

Windows:

arp -a

Linux/macOS:

arp -n
# oppure
ip neigh show

Timeout della Cache


Problematiche di Sicurezza

ARP Spoofing (ARP Poisoning)

Un attaccante invia ARP Reply falsi per:

Esempio di attacco:

Attaccante invia:
- ARP Reply a PC: "192.168.1.1 è a MAC_ATTACCANTE"
- ARP Reply a Router: "192.168.1.100 è a MAC_ATTACCANTE"

Risultato: tutto il traffico passa per l'attaccante

Difese


Limitazioni del Protocollo ARP

  1. Sicurezza: Nessuna autenticazione, vulnerabile a spoofing
  2. Scalabilità: Funziona solo in reti locali (broadcast domain)
  3. Broadcast storm: Troppe richieste possono saturare la rete
  4. IPv6: Sostituito da NDP (Neighbor Discovery Protocol)

Relazione con altri Protocolli

RARP (Reverse ARP)

Proxy ARP

GARP (Gratuitous ARP)


Riferimenti


Esercizi di Verifica

Esercizio 1

Dato il seguente dump esadecimale, identifica tutti i campi ARP:

FF FF FF FF FF FF 00 50 56 C0 00 08 08 06 00 01
08 00 06 04 00 01 00 50 56 C0 00 08 C0 A8 01 0A
00 00 00 00 00 00 C0 A8 01 01

Esercizio 2

Calcola la dimensione totale di una trama Ethernet contenente un pacchetto ARP, includendo il padding necessario.

Esercizio 3

Spiega perché in un ARP Request il campo “Target Hardware Address” è impostato a 00:00:00:00:00:00.

Esercizio 4

Descrivi il flusso completo di un’operazione ARP quando un host A (192.168.1.10) vuole comunicare con l’host B (192.168.1.20) che non è presente nella sua ARP cache.


Conclusioni

Il protocollo ARP, nonostante la sua semplicità e i suoi limiti di sicurezza, rimane fondamentale per il funzionamento delle reti Ethernet/IP moderne. La comprensione dettagliata della struttura delle sue trame è essenziale per:

La transizione verso IPv6 e il protocollo NDP rappresenta l’evoluzione naturale, ma ARP continuerà a essere rilevante nelle reti IPv4 per molti anni a venire.